<?php
ini_set('date.timezone','Asia/Shanghai');
error_reporting(E_ERROR);

require_once APP_PATH."/common/wxlib/WxPay.Api.php";
require_once APP_PATH."/common/wxlib/WxPay.Notify.php";
require_once APP_PATH."/common/wxlib/log.php";

//初始化日志
$logHandler= new \CLogFileHandler(LOG_PATH."wxpaylogs/".date('Y-m-d').'.log');
$log = \Log::Init($logHandler, 15);

class PayNotifyCallBack extends WxPayNotify
{
    //查询订单
    public function Queryorder($transaction_id)
    {
        $input = new \WxPayOrderQuery();
        $input->SetTransaction_id($transaction_id);
        $result = \WxPayApi::orderQuery($input);
        \Log::DEBUG("query:" . json_encode($result));
        if(array_key_exists("return_code", $result)
            && array_key_exists("result_code", $result)
            && $result["return_code"] == "SUCCESS"
            && $result["result_code"] == "SUCCESS")
        {
            return true;
        }
        return false;
    }

    //重写回调处理函数
    public function NotifyProcess($data, &$msg)
    {
        $notfiyOutput = array();

        if (!array_key_exists("transaction_id", $data)) {
            $msg = "输入参数不正确";
            return false;
        }
        //查询订单，判断订单真实性
        if (!$this->Queryorder($data["transaction_id"])) {
            $msg = "订单查询失败";
            return false;
        }
        $orderid = $data['out_trade_no'];
        $order = db("recharge")->where("orderid='{$orderid}'")->find();
        if(!empty($order['transaction_id']))return true;
        $order['transaction_id'] = $data['transaction_id'];
        $order['paytime'] = date("Y-m-d H:i:s", time());
        $user = db('user')->where("openid='{$order['uid']}'")->find();
        $user['diamond'] += $order['diamond'];
        if($order['diamond']>=7000 && $user['bagency']===0)
        {
            $order['bagency']=1;
            $user['bagency']=1;
            $user['bagencytime']=date("Y-m-d H:i:s",time());
        }
        if($user['refereeid']!=null)
        {
            $exworker=db('exworker')->where("id={$user['refereeid']} and status=0")->find();
            if($exworker!=null)
            {
                if($order['diamond']>=7000 && $user['bagency']===0)
                {
                    $exworker['commission']+=0.2*$order['money'];
                }
                else{
                    $exworker['commission']+=0.1*$order['money'];
                }
            }
        }
        db("recharge")->where("orderid='{$orderid}'")->update($order);
        db('user')->where("openid='{$order['uid']}'")->update($user);
        return true;
    }
}